/** 
 * Project: Auswertungstool
 * File: Rovio.java
 *
 * Description: Diese Klasse verwaltet die Kommunikation mit der Application
 *
 * last change: 14.06.2012
 * 
 * @author ebueht
 *
 */
package Lan;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Vector;

import javax.swing.JOptionPane;

import DataClasses.Data;
import DataClasses.User;
import Gui.GuiLogik;

public class ApplicationAnbindung{
    //Klassenvariablen
    private String serverName;
    private GuiLogik gL;
    
    //Konstruktor
    public ApplicationAnbindung(GuiLogik gL, String serverName, String message) throws IOException{
    	
    	//Klassenvariablen Initialisierung
    	this.serverName = serverName;
    	this.gL = gL;
        
        //Mit Application verbinden
    	Socket server = null;
        try{
            server = new Socket(serverName, 9999);
            System.out.println("Mit Server verbunden: "+server.getLocalAddress());
            PrintWriter printWriter = new PrintWriter(server.getOutputStream(), true);
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(server.getInputStream()));
            printWriter.println(message);
            System.out.println("Nachricht wurde gesendet!: "+message);
            String line;
            while((line = bufferedReader.readLine()) != null){
                System.out.println("empfangen auf Client");
                System.out.println(line);
                
                //String wird aufgeteilt
                String[] input = line.split("#");
                
                //Je nach Wort, welches vor der Raute steht, wird der String dahinter anders verarbeitet
                if(input[0].equals("usr")){
                	usertoVector(input[1]);
                }
                else if(input[0].equals("data")){
                	datatoVector(input[1]);
                }
                else if(input[0].equals("msg")){
                	System.out.println(input[1]);
                }
		        System.out.println(line.length());
		        if(line.length() > 0){
		        	break;
		        }
            }
        }
        catch(Exception e){
        	System.out.println(e);
            JOptionPane.showMessageDialog(null, "Es konnte keine Verbindung zu "+ serverName +" aufgebaut werden.", serverName + " nicht gefunden", 2);
            System.exit(0);
        }
        finally
        {
          if (server != null )
            try {server.close();  System.out.println("Verbindung schliessen");} catch ( IOException e ) { e.printStackTrace(); }
        }
    }
	
    /**
	 * Erstellt aus userString einen Vector mit User-Objekten und speichert ihn in der GuiLogik
	 * 
	 * @param userString :Like this: \\"userID&userName&userVorname&userImHaus&userRoute&|userID&userName&userVorname&userImHaus&userRoute&\\"
	 */
	private void usertoVector(String userString){
		System.out.println("Users erhalten");
		
		//Vector wird erstellt
		Vector<User> userVector = new Vector<User>();
    	
    	//Es werden Objekte erstellt und in Vector an Tool gesendet
		String[] users = userString.split("\\|");
		for(int i = 0; i < users.length; i++){
			String[] userData = users[i].split("&");
				User user = new User();
				user.setId(userData[0]);
				user.setName(userData[1]);
				user.setVorname(userData[2]);
				user.setImHaus(userData[3]);
				user.setRoute(userData[4]);
				user.setSaldo(userData[5]);
				userVector.add(user);
		}
		
		gL.setAllUsers(userVector);
	}
	

   /**
	 * Erstellt aus dataString einen Vector mit Data-Objekten und speichert ihn in der GuiLogik
	 * 
	 * @param userString :Like this: \\"Datum&MitarbeiterId&Pfad&Zeit|Datum&MitarbeiterId&Pfad&Zeit\\"
	 */
	public void datatoVector(String dataString) throws IOException{
		System.out.println("Data erhalten");
		System.out.println(dataString);
		//Vector wird erstellt
		Vector<Data> dataVector = new Vector<Data>();
    	
    	//Es werden Objekte erstellt und in Vector an Tool gesendet
		String[] data = dataString.split("\\|");
		for(int i = 0; i < data.length; i++){
			String[] dataAttribute = data[i].split("&");
				Data dataObject = new Data();
				dataObject.setDatum(dataAttribute[0]);
				dataObject.setMitarbeiterid(dataAttribute[1]);
				dataObject.setPfad(dataAttribute[2]);
				dataObject.setZeit(dataAttribute[3]);
				dataVector.add(dataObject);
		}
		
		gL.setAllData(dataVector);
	}
}
